اموزش ListView درخواستی

قبل از اینکه اموزش ListView رو بدم شما به این اشیا نیاز دارید

توضیح : ListView در قسمت component وی بی و در بخش Microsoft common control 6.0 است

یک عدد ListView که اونو فقط روی فرم قرار بدید

یک عدد imageList1 که فقط یک ایکون 16*16 درونش قرار بدید

یک عدد دیگر ImageList2 که فقط یک ایکون 32*32 درونش قرار بدید

بخش اول : اضافه کردن ایتم ها به ListView

برای اینکه بتوانیم با ListView هر کاری را انجام دهیم ابتدا باید تعدادی ایتم به ان اضافه کنیم. این کار اسان است.همه چیزی که شما احتیاج دارید این است که یک شی از ListItem بسازید و سپس به یک خط برای ساختن ایتم احتیاج خواهیم داشت. به مثال زیر توجه کنید

Dim itmx As ListItem

Set itmx = ListView1.ListItems.Add(, , "Item1")

این همه ان چیزی است که برای یک ایتم ساده به ان احتیاج داریم. کد بالا را به رویداد لود فرم بیافزاید و اجرا کنید. شما میتوانید ان ایتم را در ListView ببینید. اما تا اندازه ای ساده به نظر میرسد. در اینجا هیچ تصویری نمایش داده نشده است. برای نمایش تصاویر در ListView شما باید ان را به یک کنترل Image List (یا چند کنترل Image List) الحاق کنید. برای انجام این کار فقط روی خاصیتCustom کلیک کنید و زمانی که صفحه خواص برای ListView نمایش داده شد روی برگه Image Listکلیک کنید. برای گزینه Normal Image List > Image List1 را انتخاب کنید و برای گزینه Small Image List > Image List2 را انتخاب کنیدو سپس خارج شوید. حالا شما تصاویری را خواهید داشت که با اجرای برنامه برای هرکدام از ایتم ها خواهید داشت. بزودی تصاویر بسیاری را خواهیم داشت. برای اینکه هنگام اجرا تصویر شماره 1 از Image List1 و تصویر شماره 1 از Image List2 را نمایش دهیم فقط کافی است کد زیر را بنویسیم :

Dim itmx As ListItem

Set itmx = ListView1.ListItems.Add(, , "Item1",1,1)

 

حالا برنامه رو اجرا کنید

 

بخش دوم >> تغییر نما

چندین راه برای نمایش اطلاعات در ListView وجود دارد. مثلا میتوانید به مرورگر ویندوز نگاه کنید که میتوانید نمایش اطلاعات را در ان تغییر دهید . مثلا به شکا نمایش ایکون به شکا بزرگ یا نمایش ایکون به شکل کوچک یا ... برای دیدن هر کدام از حالات مختلف ان را در رویداد لود فرم قرار داده و اجرا کنید

Dim itmx As ListItem

Dim colx As ColumnHeader

'Add a bunch of items

Set itmx = ListView1.ListItems.Add(, , "Item1", 1, 1)

Set itmx = ListView1.ListItems.Add(, , "Item2", 1, 1)

Set itmx = ListView1.ListItems.Add(, , "Item3", 1, 1)

Set itmx = ListView1.ListItems.Add(, , "Item4", 1, 1)

Set itmx = ListView1.ListItems.Add(, , "Item5", 1, 1)

Set itmx = ListView1.ListItems.Add(, , "Item6", 1, 1)

Set itmx = ListView1.ListItems.Add(, , "Item7", 1, 1)

'Force window to be shown.

'This is just so you can see what is happening or else the

'messages would come up and the window would not have

'appeared yet

Me.Show

'Set the listview to icon

ListView1.View = lvwIcon

MsgBox ("You are now viewing the list in Icon View")

'Set the listview to small icon

ListView1.View = lvwSmallIcon

MsgBox ("You are now viewing the list in Small Icon View")

'Set the listview to list

ListView1.View = lvwList

MsgBox ("You are now viewing the list in List View")

'Add a column at runtime

'You can do this ahead of time in the controls

'property pages

Set colx = ListView1.ColumnHeaders.Add(, , "Name")

'Set the listview to report

ListView1.View = lvwReport

MsgBox ("You are now viewing the list in Report View")

در اینجا شما فقط باید خواص ListView را تنظیم کنید. ببینید که شما میتوانید نمای هر کدام انها را تغییر دهید

 

بخش سوم >> کار کردن با ستون ها

ایا بخاطر دارید نمای Report را در مرورگر ویندوز به شکل چی دیدید؟ دران حالت بصورت چند ستونی است و شامل : نام فایل و اندازه و .. است ممکن است مشکل به نظر برسد من به شما اطمینان میدهم که خیلی ساده است

این کدها را اجرا و بررسی کنید که هر کدام بعد از این کد دارای توضیحاتی هستند

Dim itmx As ListItem

Dim colx As ColumnHeader

'Add some columns

Set colx = ListView1.ColumnHeaders.Add(, , "Filename")

Set colx = ListView1.ColumnHeaders.Add(, , "Type")

Set colx = ListView1.ColumnHeaders.Add(, , "Size")

Set colx = ListView1.ColumnHeaders.Add(, , "Date")

'Add an item. The text here is always the

'First Column (Index 0)

Set itmx = ListView1.ListItems.Add(, , "Abstract.exe", 1, 1)

'Here is how we access each of the columns

itmx.SubItems(1) = "Program File"

itmx.SubItems(2) = "15 KB"

itmx.SubItems(3) = "10/10/1999"

'Set the listview to report

ListView1.View = lvwReport

شما می توانید ببینید که ما فقط به اضافه کردن تعدادی از ستونها احتیاج داشتیم مانند مثال قبلی. تفاوتی که در اینجا وجود دارد این است که ما به SubItem ها در یک ListItem دسترسی داریم. وقتی شما ابتدا یک ایتم متن را اضافه کنید ان را در Column(0) دریافت خواهید کرد.سپس برای قرار دادن متن در ستونهای دیگر ما لازم است که متن را به هر کدام از زیر ایتمها انتقال دهیم.برای مثال بالا من خودم را برای اضافه کردن تصاویر به header ستونها دردسر ندادم امل اگر شما از VB6 استفاده میکنید میتوانید این کار را نیز انجام دهید.

بخش چهارم >> رویدادهای ListView

در اینجا دو تا از رویدادهای اصلی که شما هنگام کار با ListView واقعا به انها احتیاج داردید توضیح میدهم. رویدادهای itemClick و ItemCheck.

رویداد ItemClick وقتی روی میدهد که روی لیست ایتمها کلیک شده باشد. این رویداد شی ListItemرا که روی ان کلیک شده است را بر میگرداند و بنابراین شما میتوانید با ان هر کاری را که لازم است انجام دهید.پس این کد را به مثال قبلی اضافه کنید

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)

MsgBox Item.Text

End Sub

وقتی شما برنامه را اجرا کنید و روی هر کدام از ایتمها در ListView کلیک کنید یک پیغام مبنی حاوی متن ایتمی که روی ان کلیک شده نمایش میدهد

رویداد دیگر برای وقتی است که شما حالتی را استفده کرده باشید که کنار هر کدام از ایتمهایListView یک جعبهچک نمایش داده شده باشد. این کد را به رویداد لود فرم اضافه کنید:

ListView1.Checkboxes = True

وقتی شما برنامه را اجرا کنید متوجه خواهید شد که یک جهبه چک در کنار هر کدام از ایتم ها داده شده است. ممکن است تا زمانی که روی ListView کلیک نشود ان را به روز نکند ( به نظر میرسد این یکی از باگهای VB باشد). اما اگر شما مقادیر جعبه چکها را در زمان طراحی تغییر دهید ان را بدرستی نمایش خواهد داد. برای انجام دادن کاری در زمان که کاربر جعبه چکها را تیک میزند و یا تیک را برمیدارد شما باید کد زیر را در رویداد ItemCheck قرار دهید.

Private Sub ListView1_ItemCheck(ByVal Item As MSComctlLib.ListItem)

If Item.Checked Then

MsgBox "Box is being checked"

Else

MsgBox "Box is being unchecked"

End If

End Sub

بخش پنجم >> مرتب کردن ListView بوسیله ستون ها:

در این بخش ما میخواهیم ایتم های را در حالت Report به ListView اضافه کنیم و وقتی که کاربر روی عنوان یکی از ستونها کلیک کرد میخواهیم ایتم های موجود در ListView را بر اساس همان ستون مرتب کنیم. اگر کاربر روی همان ستون دوباره کلیک کرد این مرتب سازی بین حالت صعودی و نزولی تغییر کند. ابتدا نگاهی به کد زیر میاندازیمکه تا اندازه ای واضح است:

Private Sub Form_Load()

Dim itmx As ListItem

Dim colx As ColumnHeader

'Add Some Columns

Set colx = ListView1.ColumnHeaders.Add(, , "Col1")

Set colx = ListView1.ColumnHeaders.Add(, , "Col2")

'Add two items

Set itmx = ListView1.ListItems.Add(, , "ABC")

itmx.SubItems(1) = "XYZ"

Set itmx = ListView1.ListItems.Add(, , "XYZ")

itmx.SubItems(1) = "ABC"

'Set the view to report

ListView1.View = lvwReport

End Sub

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As

MSComctlLib.ColumnHeader)

'Check if the Sortkey is the same a the current one

If ListView1.SortKey <> ColumnHeader.Index - 1 Then

'When a column is clicked set the sortkey

'to the columnheader index -1

ListView1.SortKey = ColumnHeader.Index - 1

ListView1.SortOrder = lvwAscending

Else

'If the column is already selected then change the

'sortorder to be the opposite of what is currently

'being used

ListView1.SortOrder = IIf(ListView1.SortOrder = lvwAscending, _

lvwDescending, lvwAscending)

End If

'Set the sorted property to use the new sortkey

'and sort the contents

ListView1.Sorted = True

End Sub

بنابراین وقتی کاربر روی یک ایتم کلیک میکند رویداد Column_Click رخ میدهد که مرجعی به شیColumnHeader که کلیک شده است برمیگرداند. در این کد ما این را برای دسترسی به خاصیتindex برای مقدار دهی SortKey از کنترل ListView بکار برده ایم ( SortKey فقط میگوید ListViewچگونه مرتب شود ) وقتی که این کامل شد ما مقدار خاصیت Sorted کنترل ListView را به Trueمقدار میدهی.این اطمینان حاصل میکند که کنترل مرتب شده است و بوسیله این تغییرات درSortKey منعکس شده و نمایش داده شود. اگر همان ستون دوباره کلیک شد سپس ما نوع مرتب سازی را تغییر میدهیم و ان را برابر عکس روش فعلی قرار میدهیم

 

بخش ششم >> ذخیره کردن عناوین ستونهای مرتب شده :

ایا تاکنون شما برنامه های را دیده اید که چیزهایی را در ان مطابق میلتان تنظیم کرده اید و سپس از برنامه خارج شده و وقتی که دوباره به برنامه برگشته اید همه تنظیمات ان به حالت پیش فرض برگشته است و هیچ کدام از تنظیمات مورد نیاز شما را ذخیره نکرده باشد؟ این مساله بی نهایت ازار دهنده است و نشان دهنده یک برنامه نویسی ضعیف است. برای کنترل ListView این مساله در رابطه با ColumnHeader صدق میکند. اگر شما اجازه دهید که کاربر اندازه یا نوع مرتب سازی ستونها را تغییر دهد باید این تنظیمات را ذخیره کنید بنابراین دفعه بعد که کاربر از برنامه شما استفاده کند این تنظیمات را در اختیار خواهد داشت. در اینجا کدی را که شما برای انجام دادن این کار نیاز دارید قرار دادم البته بیشتر کدها رو قبلا گفتم و فقط یه مقدارش جدید است

Private Sub Form_Load()

Dim colx As ColumnHeader

'Let the user reorder the columns

ListView1.AllowColumnReorder = True

'Set view to report

ListView1.View = lvwReport

'Add some columns

Set colx = ListView1.ColumnHeaders.Add(, , "Col1")

Set colx = ListView1.ColumnHeaders.Add(, , "Col2")

Set colx = ListView1.ColumnHeaders.Add(, , "Col3")

Set colx = ListView1.ColumnHeaders.Add(, , "Col4")

Set colx = ListView1.ColumnHeaders.Add(, , "Col5")

Set colx = ListView1.ColumnHeaders.Add(, , "Col6")

'Loop though each ColumnHeader object and set the

'position of it dependent on what the user did

'the last time

For Each colx In ListView1.ColumnHeaders

colx.Position = GetSetting(App.Title, "Settings", "Col" & colx.Index,colx.Index)

colx.Width = GetSetting(App.Title, "Settings", "ColWidth" & colx.Index, colx.Width)

Next

End Sub

Private Sub Form_Unload(Cancel As Integer)

Dim colx As ColumnHeader

'Save the Position of each of the ColumnHeader

'Objects so we can load them the next time

'the user starts the program

For Each colx In ListView1.ColumnHeaders

SaveSetting App.Title, "Settings", "Col" & colx.Index,ListView1.ColumnHeaders(colx.Index).Position

SaveSetting App.Title, "Settings", "ColWidth" & colx.Index,ListView1.ColumnHeaders(colx.Index).Width

Next

End Sub

رویداد Unload فرم تا زمانی که همه ColumnHeader ها در کنترل ListView را بدست اورده و مکان و اندازه (عرض) انها را ذخیره کند ادامه پیدا میکند.سپس دفعه بعد که برنامه اجرا شود در رویداد لود فرم این خواص اشاره شده و مقادیر انها را به اشیای ColumnHeader خاص برمی گردانیم.

چند روز دیگه اموزش تری ویو رو میزارم سر بزنی



نظرات شما عزیزان:

نام :
آدرس ایمیل:
وب سایت/بلاگ :
متن پیام:
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

 

 

 

عکس شما

آپلود عکس دلخواه:






موضوعات مرتبط: آموزش ، ،
برچسب‌ها: